package DesignPattern.Singleton;

/**
 * @Author self
 * @Date 2024/8/11 17:39
 */

/*
这是懒汉式单例的优化版，兼顾了延迟加载和线程安全，且性能较好。
*/

public class SingletonLanHanDoubleCheckedLocking {
    // 使用 volatile 保证可见性和有序性
    private static volatile SingletonLanHanDoubleCheckedLocking instance;

    private SingletonLanHanDoubleCheckedLocking() {}

    public static SingletonLanHanDoubleCheckedLocking getInstance() {
        if (instance == null) {  // 第一次检查
            synchronized (SingletonLanHanDoubleCheckedLocking.class) {
                if (instance == null) {  // 第二次检查
                    instance = new SingletonLanHanDoubleCheckedLocking();
                }
            }
        }
        return instance;
    }
}
